package com.whfc.mach.service;


import com.whfc.common.exception.BizException;
import com.whfc.common.result.ListData;
import com.whfc.common.result.PageData;
import com.whfc.common.result.PageVO;
import com.whfc.mach.dto.*;
import com.whfc.mach.entity.AppMachDataLog;
import com.whfc.mach.param.MachPageDataQueryParam;
import com.whfc.mach.param.MachQueryParam;

import java.util.Date;
import java.util.List;

/**
 * @author sun_guodong
 * @description 设备数据服务
 * @date 2020-11-11
 */
public interface AppMachDataService {

    /**
     * 设备列表(分页)
     *
     * @param param
     * @return
     * @throws BizException
     */
    PageData<AppMachDTO> list(MachPageDataQueryParam param) throws BizException;

    /**
     * 查找设备列表（不分页）
     *
     * @param deptIds
     * @param keyword
     * @param deviceType
     * @param state
     * @param bindFlag
     * @return
     * @throws BizException
     */
    ListData<AppMachDTO> list(List<Integer> deptIds, String keyword, Integer deviceType, Integer state, Integer bindFlag, Integer machType) throws BizException;

    /**
     * 获取地图页设备列表
     *
     * @param deptId
     * @param deptIds
     * @param corpIds
     * @param machTypeIds
     * @param keyword
     * @return
     */
    MapMachDTO getMapList(Integer deptId, List<Integer> deptIds, List<Integer> corpIds, List<Integer> machTypeIds, String keyword) throws BizException;

    /**
     * 获取设备数据列表
     *
     * @param deptIds
     * @param pageNum
     * @param pageSize
     * @param keyword
     * @param bindFlag
     * @param netState
     * @param workState
     * @return
     * @throws BizException
     */
    PageData<AppMachDTO> dataList(List<Integer> deptIds, Integer pageNum, Integer pageSize, String keyword, Integer bindFlag, Integer netState, Integer workState) throws BizException;

    /**
     * 查找设备数据列表(不分页)
     *
     * @param deptIds
     * @param keyword
     * @param deviceType
     * @return
     * @throws BizException
     */
    List<AppMachDTO> dataList(List<Integer> deptIds, String keyword, Integer deviceType) throws BizException;

    /**
     * 机械云管家列表
     *
     * @param deptIds
     * @param pageNum
     * @param pageSize
     * @param keyword
     * @param startTime
     * @param endTime
     * @return
     * @throws BizException
     */
    PageData<AppMachDTO> deviceList(List<Integer> deptIds, Integer pageNum, Integer pageSize, String keyword, Date startTime, Date endTime) throws BizException;

    /**
     * 获取设备基本信息服务
     *
     * @param machId
     * @return
     * @throws BizException
     */
    AppMachDTO getMachInfo(Integer machId) throws BizException;

    /**
     * 获取设备二维码
     *
     * @param machId
     * @return
     * @throws BizException
     */
    String getMachQr(Integer machId) throws BizException;

    /**
     * 获取微信设备列表(分页)
     *
     * @param param
     * @return
     * @throws BizException
     */
    PageData<AppMachDTO> getWxMachList(MachPageDataQueryParam param) throws BizException;

    /**
     * 获取微信设备列表(不分页)
     *
     * @param param
     * @return
     * @throws BizException
     */
    List<AppMachDTO> getWxMachList(MachQueryParam param) throws BizException;

    /**
     * 统计设备数量
     *
     * @param param
     * @return
     * @throws BizException
     */
    MachDataStatDTO machNumstatic(MachQueryParam param) throws BizException;

    /**
     * 设备数据统计（天数）
     *
     * @param deptId
     * @param date
     * @return
     * @throws BizException
     */
    MachLogNumDTO dayReportDate(Integer deptId, Date date) throws BizException;


    /**
     * 查找多台设备的轨迹
     */
    List<AppMachGpsDTO> getAllMachGpsList(List<Integer> deptIds, Date date) throws BizException;

    /**
     * 查找设备的运动轨迹
     *
     * @param machId
     * @param date
     * @return
     * @throws BizException
     */
    AppMachGpsDTO gpsLog(Integer machId, Date date) throws BizException;
    /**
     * 查找设备的运动轨迹
     *
     * @param machId
     * @param date
     * @return
     * @throws BizException
     */
    PageData<AppMachDataLogDTO> gpsLogPage(Integer machId, Date date, Integer pageNum, Integer pageSize) throws BizException;

    /**
     * 获取设备最新位置
     *
     * @param machId
     * @return
     * @throws BizException
     */
    Gps gpsLatest(Integer machId) throws BizException;


    /**
     * 查询设备的每日工时
     *
     * @param machId
     * @param date
     * @return
     * @throws BizException
     */
    AppMachWorkHourDayDTO getMachWorkHourDayData(Integer machId, Date date) throws BizException;


    /**
     * 查询设备多日的工时和油耗
     *
     * @param machId
     * @param startDate
     * @param endDate
     * @return
     * @throws BizException
     */
    MachRunDataDTO getMachWorkAndOilData(Integer machId, Date startDate, Date endDate) throws BizException;

    /**
     * 查询一台设备多天油耗数据
     *
     * @param machId
     * @param startDate
     * @param endDate
     * @return
     * @throws BizException
     */
    MachRunDataDTO getOilData(Integer machId, Date startDate, Date endDate) throws BizException;

    /**
     * 查询一台设备单日油耗数据
     *
     * @param machId
     * @param date
     * @return
     * @throws BizException
     */
    MachRunDataDTO getOilData(Integer machId, Date date) throws BizException;

    /**
     * 获取设备剩余油量
     *
     * @param machId
     * @return
     * @throws BizException
     */
    Oil getRemainOil(Integer machId) throws BizException;

    /**
     * 获取设备油位信息（开放接口）
     *
     * @param machId
     * @param date
     * @return
     * @throws BizException
     */
    ListData<Oil> oilPos(Integer machId, Date date) throws BizException;


    /**
     * 查找单台设备多天运行指数
     *
     * @param machId
     * @param startDate
     * @param endDate
     * @return
     * @throws BizException
     */
    MachRadarMapDTO getRadarData(Integer machId, Date startDate, Date endDate) throws BizException;

    /**
     * 获取单机雷达图数据
     *
     * @param machId
     * @param startDate
     * @param endDate
     * @return
     */
    MachRadarMapDTO getSingleRardarMap(Integer machId, Date startDate, Date endDate) throws BizException;

    /**
     * 查询集群雷达图
     *
     * @param deptIds
     * @return
     * @throws BizException
     */
    MachRadarMapDTO getMultiRardarMap(List<Integer> deptIds) throws BizException;


    /**
     * 查询集群曲线图
     *
     * @param deptIds
     * @return
     * @throws BizException
     */
    MachCurveMapDTO getMultiCurveMap(List<Integer> deptIds) throws BizException;

    /**
     * 获取单机一段时间内运行数据
     *
     * @param machId
     * @param startDate
     * @param endDate
     * @return
     * @throws BizException
     */
    ListData<MachCurveMapDayDTO> getSingleMachCurveMapDayList(Integer machId, Date startDate, Date endDate) throws BizException;


    /************内部操作*************/

    /**
     * 刷新设备硬件在线状态
     */
    void refreshNetState() throws BizException;

    /**
     * 刷新obd设备硬件在线状态
     *
     * @param deptIds
     */
    void refreshObdNetState(List<Integer> deptIds) throws BizException;

    /**
     * 统计设备每日运行数据
     *
     * @param date
     */
    void statMachDayData(Date date) throws BizException;

    /**
     * 统计某一设备每日运行数据
     *
     * @param date
     * @param machId
     */
    void statMachDayData(Integer machId, Date date) throws BizException;

    /**
     * 从缓存中查找数据
     *
     * @param machId
     * @param date
     * @return
     * @throws BizException
     */
    List<AppMachDataLogDTO> getMachDataLogCache(Integer machId, Date date) throws BizException;

    /**
     * 查找设备的硬件数据
     *
     * @param deviceId
     * @param startTime
     * @param endTime
     * @param pageNum
     * @param pageSize
     * @return
     * @throws BizException
     */
    PageData<AppMachDataLogDTO> getMachDataLogListByDeviceId(Integer deviceId, Date startTime, Date endTime, Integer pageNum, Integer pageSize) throws BizException;

    /**
     * 添加硬件数据
     *
     * @param dataLog
     * @throws BizException
     */
    void addMachDataLog(List<AppMachDataLog> dataLog) throws BizException;

    /**
     * 修正设备硬件数据
     *
     * @param dataList
     * @throws BizException
     */
    void amendDeviceData(List<AppMachDataLog> dataList) throws BizException;

    /**
     * 获取硬件的油位标定原始数据
     *
     * @param deviceId
     * @param startTime
     * @param endTime
     * @return
     * @throws BizException
     */
    List<AppMachOilLogDTO> getDeviceOilLog(Integer deviceId, Date startTime, Date endTime) throws BizException;

    /**
     * 获取设备油位标定结果
     *
     * @param machId
     * @return
     * @throws BizException
     */
    List<AppMachOilSheetDTO> getMachOilSheet(Integer machId) throws BizException;

    /**
     * 保存设备油位标定结果
     *
     * @param machId
     * @param oilSheetDTOS
     */
    void saveMachOilSheet(Integer machId, List<AppMachOilSheetDTO> oilSheetDTOS) throws BizException;

    /**
     * 获取硬件信息
     *
     * @param deviceId
     * @return
     * @throws BizException
     */
    AppDeviceMachDataDTO getDeviceData(Integer deviceId) throws BizException;
}
